package com.cj.po;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 分页信息类，用于存储分页的相关信息
 *
 * @param <T> 列表中元素的数据类型
 */
public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L; // Serializable的版本号

    private Integer pageIndex = 1; // 当前页码
    private Integer pageSize = 3; // 每页显示的条目数
    private Integer totalCount = 0; // 总条目数
    private Integer pageTotalCount = 0; // 总页数

    // 每页显示的数据集合
    private List<T> list = new ArrayList<T>();

    /**
     * 获取当前页码
     *
     * @return 当前页码
     */
    public Integer getPageIndex() {
        return pageIndex;
    }

    /**
     * 设置当前页码，若传入的页码无效则默认为1
     *
     * @param pageIndex 页码
     */
    public void setPageIndex(Integer pageIndex) {
        this.pageIndex = pageIndex;
        // 如果页码为空或小于1，则设为1
        if (pageIndex == null || pageIndex < 1) {
            this.pageIndex = 1;
        }
    }

    /**
     * 获取每页显示的条目数
     *
     * @return 每页显示的条目数
     */
    public Integer getPageSize() {
        return pageSize;
    }

    /**
     * 设置每页显示的条目数，若传入的条目数无效则默认为3
     *
     * @param pageSize 每页显示的条目数
     */
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
        // 如果条目数为空或小于1，则设为3
        if (pageSize == null || pageSize < 1) {
            this.pageSize = 3;
        }
    }

    /**
     * 获取总条数
     *
     * @return 总条数
     */
    public Integer getTotalCount() {
        return totalCount;
    }

    /**
     * 设置总条数
     *
     * @param totalCount 总条数
     */
    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    /**
     * 获取总页数
     *
     * @return 总页数
     */
    public Integer getPageTotalCount() {
        // 计算总页数
        this.pageTotalCount = totalCount / pageSize;
        // 如果总条数不能被每页条目数整除，则需要加1页
        if (totalCount % pageSize != 0) {
            this.pageTotalCount++;
        }
        return pageTotalCount;
    }

    /**
     * 设置总页数
     *
     * @param pageTotalCount 总页数
     */
    public void setPageTotalCount(Integer pageTotalCount) {
        this.pageTotalCount = pageTotalCount;
    }

    /**
     * 获取当前页的数据集合
     *
     * @return 当前页的数据集合
     */
    public List<T> getList() {
        return list;
    }

    /**
     * 设置当前页的数据集合
     *
     * @param list 当前页的数据集合
     */
    public void setList(List<T> list) {
        this.list = list;
    }
}
